home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl5
- #
- # samba-gen.cgi
- #
- # Copyright 1988-1996 Silicon Graphics, Inc.
- # All rights reserved.
- #
- # This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
- # the contents of this file may not be disclosed to third parties, copied or
- # duplicated in any form, in whole or in part, without the prior written
- # permission of Silicon Graphics, Inc.
- #
- # RESTRICTED RIGHTS LEGEND:
- # Use, duplication or disclosure by the Government is subject to restrictions
- # as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
- # and Computer Software clause at DFARS 252.227-7013, and/or in similar or
- # successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
- # rights reserved under the Copyright Laws of the United States.
- #
- # $Id: samba-gen.frm,v 1.5 1997/06/19 22:26:33 shotes Exp $
-
- require "/usr/OnRamp/lib/OnRamp.pm";
- require "/usr/OnRamp/lib/java.pm";
-
- $js_edit =
- "$js_standard;
- $js_error_box;
- $js_filename;
- $js_hostname;
- function checkForm(form) {
- if (!testFileChars(form.workgroup.value)) {
- errorBox(form.workgroup, \"The workgoup name cannot contain \"
- + \"metacharacters.\");
- return (false);
- }
- if (!testHostname(form.wins_server, form.wins_server.value,
- \"wins server\", 1)) return (false);
- print = form.print_command.value;
- ind = print.indexOf(\" \", 0);
- if (ind == -1) {
- if (!testFilename(form.print_command, \"print command\"))
- return (false);
- } else {
- path = print.substring(0, ind);
- if (!myTestFilename(form.print_command, path, \"print commant\")) return (false);
- if (!myTestFileChars(form.print_command.value)) {
- errorBox(form.print_command, \"The print command cannot contain \"
- + \"meta characters.\");
- return (false);
- }
- }
- return (true);
- }
- function myTestFilename(Ctrl, word, what) {
- if (word == \"\") {
- errorBox (Ctrl, \"The \" + what + \" is required.\");
- return (false);
- }
- if (!myTestFileChars(word)) {
- errorBox (Ctrl, \"The \" + what + \" cannot \\ncontain \"
- + illegal + \" characters.\");
- return (false);
- }
- for(i = 0; i < word.length; i++) {
- if (word.charAt(i) == ' ') {
- errorBox (Ctrl, \"The \" + what + \" cannot \\ncontain spaces.\");
- return (false);
- }
- }
- if (word.charAt(0) != '/') {
- errorBox (Ctrl, \"The \" + what + \" must be fully qualified.\");
- return (false);
- }
- return (true);
- }
- function myTestFileChars(word) {
- metaChars = \"{}()*!~<>?|[]'&^\$\@\#`\\\";:\";
- for(j = 0; j < metaChars.length; j++) {
- illegal = metaChars.charAt(j);
- if (word.indexOf (illegal, 0) != -1) return (false);
- } return (true);
- }";
-
- $conf = "/usr/local/samba/lib/smb.conf";
- $dummy = "/usr/local/samba/lib/smb.conf.tmp";
- $myname = "samba-gen.cgi";
- $title = "SAMBA Configuration";
- $smbd = "/usr/local/samba/bin/smbd";
-
- open(IN, "/usr/bsd/hostname |");
- $host = <IN>;
- close(IN);
- chop($host);
-
- $defaults = " server string = $host, samba %v\n"
- . " guest = nobody\n"
- . " wins support = yes\n"
- . " load printers = yes\n"
- . " printing = sysv\n"
- . " preserve case = yes\n"
- . " short preserve case = yes\n\n";
-
-
- if ( ! -e $smbd) {
- print "Content-type: text/html\n\n";
- &title_block($title);
- &header_block($title);
- print "<i>SAMBA software not installed. Install subsystem
- </i><b>fw_samba.sw.base</b><i> from the freeware CD.</i>";
- exit 0;
- }
-
- &get_fields2;
-
- &get_vals;
-
- if (%fld) {
- $help = $document_root . $ENV{"SCRIPT_NAME"};
- $help =~ s/cgi$/hlp/;
- exec $help if ($fld{'help'} eq "Help");
-
- if ($fld{'ok'}) {
- &doEdit;
- &get_vals;
- &editAccount;
- }
- } else { &editAccount; }
- exit 0;
-
- sub get_fields2 {
- my $buffer, $name, $value, $pair, @pairs;
-
- read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
-
- @pairs = split(/&/, $buffer);
-
- foreach $pair (@pairs) {
- ($name, $value) = split(/=/, $pair);
- $value =~ tr/+\t/ /;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
-
- $name = "xaster" if ($name eq "*");
- $name =~ s/\+/ /g;
-
- $fld{$name} = $value;
- }
- }
-
- sub doEdit {
- $added = 0;
- open(IN, "< $conf");
- open(OUT, "> $dummy");
- while(<IN>) {
- if ($_ =~ /\[global\]/) {
- while(<IN>) {
- if ($_ =~ /\[.*\]/) { last; }
- }
-
- print OUT "[global]\n";
- &add_global;
- $added = 1;
-
- print OUT $_;
- } else { print OUT $_; }
- }
- close(IN);
- close(OUT);
- rename($dummy, $conf);
-
- if ($added == 0) {
- open(OUT, "> $conf");
- print OUT "[global]\n";
- &add_global;
- close(OUT);
- }
-
- if ($fld{'enable'} eq "Yes") {
- system("/etc/chkconfig", "samba", "on");
- unless (fork) {
- unless (fork) {
- sleep 1 until getppid == 1;
- system("/etc/init.d/samba stop > /dev/null 2>&1");
- system("/etc/init.d/samba start > /dev/null 2>&1");
- exit 0;
- }
- exit 0;
- }
- wait;
- } else {
- if (!fork) {
- system("/etc/chkconfig", "samba", "off");
- system("/etc/init.d/samba stop > /dev/null");
- exit 0;
- }
- }
- }
-
- sub add_global {
- if ($fld{'browse'} eq "Yes") {
- print OUT " preferred master = yes\n",
- " os level = 50\n";
- }
- if ($fld{'domain'} eq "Yes") {
- print OUT " domain master = yes\n";
- }
- if ($fld{'workgroup'}) {
- print OUT " workgroup = $fld{'workgroup'}\n";
- }
- if ($fld{'wins_server'}) {
- print OUT " wins server = $fld{'wins_server'}\n";
- }
- if ($fld{'print_command'}) {
- print OUT " print command = $fld{'print_command'}\n";
- }
- print OUT $defaults;
- }
-
- sub get_vals {
- $val{'browse'} = "No";
- $val{'domain'} = "No";
-
- open(IN, "< $conf");
-
- $read_lines = 0;
- while(<IN>) {
- if ($_ =~ /\[global\]/) { $read_lines = 1; next; }
- elsif ($_ =~ /\[.*\]/) { $read_lines = 0; next; }
- next if $read_lines == 0;
- next if substr($_,0,1) eq ";";
-
- if ($_ =~ /(.*)=(.*[^\s].*)/) {
- $parm = $1;
- $value = $2;
-
- $parm =~ /^\s*([^\s].*[^\s])\s*$/; $parm = $1;
- $value =~ /^\s*([^\s].*)$/; $value = $1;
-
- if (($parm eq "preferred master" && $value eq "yes")
- || ($parm eq "os level" && $value > 34)) {
- $val{'browse'} = "Yes";
- }
-
- if ($parm eq "domain master" && $value eq "yes") {
- $val{'domain'} = "Yes";
- }
-
- if ($parm eq "wins server") {
- $val{"wins_server"} = $value;
- }
-
- if ($parm eq "workgroup") {
- $val{$parm} = $value;
- }
-
- if ($parm eq "print command") {
- $val{"print_command"} = $value;
- }
- }
- }
-
- $chk = system ("/etc/chkconfig", "samba");
- if ($chk) { $val{'enable'} = "No"; }
- else { $val{'enable'} = "Yes"; }
- }
-
- sub editAccount {
- print "Content-type: text/html\n\n";
-
- &js_title_block($title,$js_edit);
-
- &header_block("SAMBA Configuration");
-
- print "$message<br>";
-
- print "<form name=StandardForm action=$myname method=post "
- . "onSubmit=\"return runSubmit()\">";
-
- print "<center><table width=450>\n";
-
- print "<tr><th align=left>Enable Samba?\n",
- "<td><b>", &radio("enable", $val{'enable'}, "Yes", "No"), "</b></td></tr>\n";
-
- print "<tr><th align=left>Name of workgroup:\n",
- "<td>", &text("workgroup", $val{'workgroup'}, 20), "</td></tr>\n";
-
- print "<tr><th align=left>Set this server to be a browse master?\n",
- "<td><b>", &radio("browse", $val{'browse'}, "Yes", "No"), "</b></td></tr>\n";
-
- print "<tr><th align=left>Set this server to be a domain master?\n",
- "<td><b>", &radio("domain", $val{'domain'}, "Yes", "No"), "</b></td></tr>\n";
-
- print "<tr><th align=left>Name of network wins server:\n",
- "<td>", &text("wins_server", $val{'wins_server'}, 20), "</td></tr>\n";
-
- print "<tr><th align=left>Print command:\n",
- "<td>", &text("print_command", $val{'print_command'}, 20), "</td></tr>\n";
-
- print "</table></center><br><br>\n";
-
- print &js_buttons('ok','Ok','onClick="markOK()"',
- 'onClick="markOther()"');
- print "</form></body></html>";
- }
-